import { serverStore } from "@/stores/server";
import axios from "axios";
import { ElMessage } from "element-plus";
import { decryptData } from "./CryptoJSUtil";

// 从 store 中获取服务器地址
const { server } = serverStore();

// 创建 axios 实例
const axiosInstance = axios.create({
    baseURL: server,
    timeout: 20000,
    headers: {
        "Content-Type": "application/json",
    },
});

// 获取用户 id
const userId = localStorage.getItem("ButVanUserId");

// 请求拦截器
axiosInstance.interceptors.request.use(
    (config) => {
        if (userId) {
            config.headers.ButVanUserId = userId;
        }
        return config;
    },
    (error) => {
        return Promise.reject(error);
    }
);

// 响应拦截器
axiosInstance.interceptors.response.use(
    (res) => {
        if (res.data && typeof res.data === 'string') {
            try {
                const decrypted = decryptData(res.data)
                res.data = JSON.parse(decrypted)
            } catch (err) {
                console.error('解密响应失败:', err);
            }
        }
        if (res.data.code === 0) {
            ElMessage.error(res.data.msg);
            // 根据实际需求决定是否返回特定值，这里简单返回 null
            return null;
        }
        if (res.data.code === 1) {
            if (res.data.msg !== null) {
                ElMessage.success(res.data.msg);
            }
            return res.data;
        }
        if (res.data.code === 401) {
            ElMessage.error(res.data.msg);
            return null;
        }
        return Promise.reject(res.data);
    },
    (error) => {
        // 处理错误情况，先检查 error.response 是否存在
        if (error.response) {
            ElMessage.error(error.response.data.msg || "服务异常");
        } else {
            ElMessage.error("服务异常");
        }
        return Promise.reject(error);
    }
);

export default axiosInstance;